home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 359_09 / patch4.000 / LIB_GCRT0.S < prev    next >
Text File  |  1991-07-21  |  1KB  |  86 lines

  1.  
  2. /*
  3. **    Called as start(argc, argv, envp)
  4. */
  5.  
  6.     .text
  7.  
  8.     .globl    start
  9. start:
  10.     movl    %esp,%ebx
  11.     call    mcount_init
  12.     movl    8(%ebx),%eax
  13.     pushl    %eax
  14.     movl    %eax,_environ
  15.     pushl    4(%ebx)
  16.     pushl    (%ebx)
  17.     call    _main
  18.     addl    $12,%esp
  19.     pushl    %eax
  20.     call    _exit
  21.  
  22.     movl    $0x4c00,%eax
  23.     int    $0x21
  24.  
  25.     ret
  26.  
  27.  
  28.     .globl    __exit
  29. __exit:
  30.     call    mcount_write
  31.     movb    4(%esp),%al
  32.     movb    $0x4c,%ah
  33.     int    $0x21
  34.  
  35.  
  36.     .globl    mcount_isr_init
  37. mcount_isr_init:
  38.     movw    $16,%ax
  39.     movw    %ax,%gs
  40.  
  41.     movl    $960,%eax    /* vector 0x78 * 8 bpv */
  42.     movw    %gs:(%eax),%cx
  43.     movw    %cx,mc_chain
  44.     movw    %gs:6(%eax),%cx
  45.     movw    %cx,mc_chain_hi
  46.     movw    %gs:2(%eax),%cx
  47.     movw    %cx,mc_chain_sel
  48.  
  49.     movl    $mcount_isr,%ecx
  50.     movw    %cx,%gs:(%eax)
  51.     movw    $64,%gs:2(%eax)    /* selector 8 == 32-bit code */
  52.     movw    $0x8f00,%gs:4(%eax)
  53.     rorl    $16,%ecx
  54.     movw    %cx,%gs:6(%eax)
  55.     movw    %ds,%ax
  56.     movw    %ax,%gs
  57.     ret
  58.  
  59. mcount_isr:
  60.     pushl    %eax
  61.     cmpl    $1,mcount_skip
  62.     je    L0
  63.     movl    4(%esp),%eax
  64.     subl    $0x1020,%eax
  65.     andl    $0xfffffffc,%eax
  66.     shrl    $1,%eax
  67.     addl    mcount_histogram,%eax
  68.     incw    (%eax)
  69. L0:
  70.     popl    %eax
  71.     ljmp    mc_chain
  72.  
  73.     .data
  74.  
  75.     .globl    _environ
  76. _environ:
  77.     .long    0
  78.  
  79. mc_chain:
  80.     .short    0
  81. mc_chain_hi:
  82.     .short    0
  83. mc_chain_sel:
  84.     .short    0
  85.  
  86.